package m202405.d16;

/**
 * @@author: 爱做梦的锤子
 * @date: 2024/5/16 16:57
 */
public class Q300 {

    public static void main(String[] args) {
        Q300 q300 = new Q300();
        q300.lengthOfLIS(new int[]{10, 9, 2, 5, 3});
    }

    /**
     * dp[i] 以num[i]为结尾的最长上升自序列长度
     * [10,9,2,5,3]
     * dp[0]=1 array=[10]
     * dp[1]=max(dp[0]+1,1)  array=[10] || [9]
     * dp[2]=max(dp[0]+1,d[1]+1,1) array=[10] || [9] || [2]
     * dp[3]=max(dp[0]+1,dp[1]+1,dp[2]+1,1) array= [2,5]
     * dp[4]=max(dp[0]+1,dp[1]+1,dp[2]+1,dp[3]+1,1) array= [2,5] || [2,3]
     *
     * dp[i] = max(dp[0->i-1)+1,1)
     */
    public int lengthOfLIS(int[] nums) {
        int[] dp = new int[nums.length];
        dp[0] = 1;
        int max = 1;
        for (int i = 1; i < nums.length; i++) {
            dp[i] = 1;
            for (int j = 0; j < i; j++) {
                if (nums[i] > nums[j]) {
                    dp[i] = Math.max(dp[j] + 1, dp[i]);
                }
            }
            max = Math.max(dp[i], max);
        }
        return max;
    }
}
